package Demo1;

class Animal{
    //成员变量
    public String name;
    public int age;
    //构造方法
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //重写toString方法

    @Override
    public String toString() {
        return "Animal{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
//子类Chicken
class Chicken extends Animal{
    //构造方法
    public Chicken(String name, int age) {
        super(name, age);
    }
}
//子类Pig
class Pig extends Animal{
    //构造方法
    public Pig(String name, int age) {
        super(name, age);
    }

    public static void main(String[] args) {
        //向上转型
        Animal animal1 = new Chicken("吉吉",3);
        Animal animal2 = new Pig("朱朱", 2);

        //向下转型:使用关键字instanceof

        if(animal2 instanceof Chicken){
           Chicken chicken1 = (Chicken) animal2;//编译不报错
            System.out.println(chicken1);
        }
        if(animal1 instanceof Chicken) {
            Chicken chicken2 = (Chicken) animal1;//animal1指向的是Chicken的对象，不报错
            System.out.println(chicken2);
        }
    }
}


//class Animal {
//
//    public String name;
//    public int age;
//
//    //构造方法
//    public Animal(String name, int age) {
//        this.name = name;
//        this.age = age;
//    }
//
//    public void eat(){
//        System.out.println(name + "正在吃饭....");
//    }
//    public void sleep(){
//        System.out.println(name + "正在休息....");
//    }
//}
//class Duck extends Animal{
//
//    public Duck(String name, int age) {
//        super(name, age);
//    }
//
//    @Override
//    public void eat() {
//        System.out.println(this.name + "在吃小鱼儿......");
//    }
//}
//
//class Frog extends Animal {
//
//    //构造方法
//    public Frog(String name, int age) {
//        //super替代的是Animal这个构造方法
//        //等价于Animal(name,age)
//        super(name, age);
//    }
//
//    @Override
//    public void eat() {
//        System.out.println(this.name + "在吃昆虫......");
//    }
//
//    public static void main(String[] args) {
//
//        //向上转型:使用父类的引用接收子类创建的对象
//        Animal animal1 = new Duck("丫丫",3);
//        Animal animal = new Frog("瓦瓦",3);
//
//        //eat方法
//        animal.eat();
//        animal1.eat();
//    }
//}